package com.sandyz.virtualcam.hooks

import android.content.res.XModuleResources
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam

/**
 * 虚拟摄像头Hook接口
 * 定义了所有虚拟摄像头Hook实现必须实现的方法
 * 
 * 主要功能：
 * 1. 获取支持的包名列表
 * 2. 获取Hook实现名称
 * 3. 执行Hook操作
 * 4. 初始化Hook环境
 * 5. 注册自定义资源
 * 
 * @author sandyz987
 * @date 2023/11/18
 */
interface IHook {
    /**
     * 1. 获取支持的包名列表
     * 返回该Hook实现支持的应用包名列表
     * 
     * @return List<String> 支持的包名列表
     */
    fun getSupportedPackages(): List<String>

    /**
     * 2. 获取Hook实现名称
     * 返回该Hook实现的名称，用于日志记录和调试
     * 
     * @return String Hook实现名称
     */
    fun getName(): String

    /**
     * 3. 执行Hook操作
     * 实现具体的Hook逻辑，包括：
     * - 查找目标类和方法
     * - 设置Hook回调
     * - 实现Hook逻辑
     * 
     * @param lpparam LoadPackageParam 包含目标应用信息的参数
     */
    fun hook(lpparam: LoadPackageParam?)

    /**
     * 4. 初始化Hook环境
     * 在Hook操作开始前进行必要的初始化，包括：
     * - 加载必要的类
     * - 初始化变量
     * - 准备Hook环境
     * 
     * @param cl ClassLoader 目标应用的类加载器
     */
    fun init(cl: ClassLoader?)

    /**
     * 5. 注册自定义资源
     * 注册Hook实现需要的自定义资源，包括：
     * - 布局资源
     * - 字符串资源
     * - 其他自定义资源
     * 
     * @param moduleRes XModuleResources Hook模块的资源对象
     */
    fun registerRes(moduleRes: XModuleResources?)
}